import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:overlay_support/overlay_support.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'common/index.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'global.dart';

Future<void> main() async {
  // flutter和原生端进行初始化
  WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
  // 设备启动图
  FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
  // await Global.init();
  // await GetStorage.init();
  // 禁用横屏设置
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
      .then((_) {
    runApp(MyApp());
  });
}

class MyApp extends StatelessWidget {
  MyApp({super.key});
  bool _remove = false;// 是否已经移除

  // 是否触摸的为输入框
  bool _handleTouch(Offset localPosition) {
    // 使用HitTestResult来确定用户触摸的widget类型（hitTestInView）
    final HitTestResult result = HitTestResult();
    WidgetsBinding.instance.hitTest(result, localPosition);
    for (final hit in result.path) {
      if (hit.target is RenderEditable || hit.target is TextField) {
        return true;
      }
    }
    return false;
  }

  @override
  Widget build(BuildContext context) {
    if (_remove == false) {
      _remove = true;
      FlutterNativeSplash.remove(); // 删除设备启动图
    }
    return ScreenUtilInit(
      designSize: const Size(375, 812), // 设计稿中设备的尺寸(单位随意,建议dp,但在使用过程中必须保持一致)
      // splitScreenMode: false, // 支持分屏尺寸
      // minTextAdapt: false, // 是否根据宽度/高度中的最小值适配文字
      // 一般返回一个MaterialApp类型的Function()
      builder: (context, child) {
        return OverlaySupport.global(
          // 全局配置子树下的SmartRefresher,下面列举几个特别重要的属性
          child: RefreshConfiguration(
            headerBuilder: () => const WaterDropHeader(
              // idleIcon: SpinKitHourGlass(color: Colors.white, size: 16),
              // waterDropColor: UIColor.themeColor,
              completeDuration: Duration(milliseconds: 100),
              // refresh: SpinKitCircle(color: UIColor.themeColor, size: 30),
              complete: Text(''), // 自定义刷新完成文本
              failed: Text(''), // 自定义刷新失败文本
            ), // 配置默认头部指示器,假如你每个页面的头部指示器都一样的话,你需要设置这个
            footerBuilder: () => const SmartRefresherFooterWidget(),
            headerTriggerDistance: 80.0, // 头部触发刷新的越界距离
            springDescription: const SpringDescription(
                stiffness: 170,
                damping: 16,
                mass: 1.9), // 自定义回弹动画,三个属性值意义请查询flutter api
            maxOverScrollExtent: 100, //头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性
            maxUnderScrollExtent: 0, // 底部最大可以拖动的范围
            enableScrollWhenRefreshCompleted:
            true, //这个属性不兼容PageView和TabBarView,如果你特别需要TabBarView左右滑动,你需要把它设置为true
            enableLoadingWhenFailed: true, //在加载失败的状态下,用户仍然可以通过手势上拉来触发加载更多
            hideFooterWhenNotFull: false, // Viewport不满一屏时,禁用上拉加载更多功能
            enableBallisticLoad: true, // 可以通过惯性滑动触发加载更多
            child: GetMaterialApp(
              title: '同城速约',
              // 样式
              // theme: ConfigService.to.isDarkModel ? AppTheme.dark : AppTheme.light,
              theme: ThemeData(brightness: Brightness.light),
              darkTheme: ThemeData(brightness: Brightness.light),
              /// 配置 本地存储 主题类型
              // themeMode: ThemeTool.getlocalprofileaboutThemeModel(),
              // 路由
              initialRoute: RouteNames.systemLogin,
              // initialRoute: RouteNames.systemSplash,
              // 路由中间件
              routingCallback: (routing) {
                // print(routing);
                // if (routing?.current == '/second') {
                //   ///处理一些业务
                // }
              },
              getPages: RoutePages.list,
              navigatorObservers: [RoutePages.observer, Global.routeObserver],
              translations: International(), // 国际化文本设置
              locale: const Locale('zh', 'CN'), //设置默认语言
              fallbackLocale: const Locale("zh", "CN"), // 在配置错误的情况下,使用的语言
              /// 国际化处理
              localizationsDelegates: const [
                /// iOS一定要设置，不然报错
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
                GlobalCupertinoLocalizations.delegate,
              ],
              supportedLocales: const [
                Locale('zh', 'CN'),
                Locale('en', 'US'),
              ],
              // builder
              builder: (context, widget) {
                widget = EasyLoading.init()(context, widget); // EasyLoading 初始化
                /// 记录事件点击时间
                int inSeconds = 0;

                /// 全局监听键盘
                return Listener(
                  onPointerDown: (PointerDownEvent event) {
                    /// 记录开始触摸事件
                    inSeconds = event.timeStamp.inSeconds;
                  },
                  onPointerUp: (PointerUpEvent event) {
                    /// 时间间隔
                    int interval = event.timeStamp.inSeconds - inSeconds;
                    // 判断是否有键盘弹起
                    final double viewInsetsBottom =
                        MediaQuery.of(context).viewInsets.bottom;
                    //防止复制粘贴时触发(长按手势)
                    if (interval < 1 &&
                        viewInsetsBottom > 0 &&
                        !_handleTouch(event.localPosition)) {
                      FocusScopeNode currentFocus = FocusScope.of(context);
                      if (!currentFocus.hasPrimaryFocus &&
                          currentFocus.focusedChild != null) {
                        FocusManager.instance.primaryFocus?.unfocus();
                      }
                    }
                  },
                  child: widget,
                  // // 不随系统字体缩放比例
                  // child: MediaQuery(
                  //   data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
                  //   child: widget,
                  // ),
                );
              },
              debugShowCheckedModeBanner: false,
            ),
          ),
        );
      },
    );
  }
}
